package ltutils

import (
	"errors"
	"gorm.io/gorm"
	"reflect"
	"strconv"
	"strings"
)

// CopyStruct 结构复制，把字段名相同的字段复制
func CopyStruct(src, dst interface{}) {
	sval := reflect.ValueOf(src).Elem()
	dval := reflect.ValueOf(dst).Elem()

	for i := 0; i < sval.NumField(); i++ {
		value := sval.Field(i)
		name := sval.Type().Field(i).Name

		dvalue := dval.FieldByName(name)
		if dvalue.IsValid() == false {
			continue
		}
		dvalue.Set(value) //这里默认共同成员的类型一样，否则这个地方可能导致 panic，需要简单修改一下。
	}
}

// IsTableNotExist 是否是错误：表不存在
func IsTableNotExist(err error) bool {
	if err == nil {
		return false
	}
	return strings.Contains(err.Error(), "Table") && strings.Contains(err.Error(), "doesn't exist")
}

func IsDbNoRecord(err error) bool {
	//return strings.EqualFold("record not found", err.Error())
	return errors.Is(err, gorm.ErrRecordNotFound)
}

// GetDecimalDigit 获取小数位数
func GetDecimalDigit(f float64) int {
	str := strconv.FormatFloat(f, 'f', -1, 64)
	tmp := strings.Split(str, ".")
	if len(tmp) <= 1 {
		return 0
	}
	return len(tmp[1])
}
